const axios = require('axios');

const subject = require('./subject.json');

// 发送数据到后端
async function sendDataToBackend(data) {
    try {
        // 请根据实际情况修改后端URL
        const backendUrl = 'http://localhost:2180/api/answer/questions/insert'; // 示例URL，请修改为实际的后端地址
        // const backendUrl = 'http://localhost:2180/api/answer/questions/insertList'; // 示例URL，请修改为实际的后端地址

        // 根据后端错误信息，后端期望直接接收AiQuestionsBo对象（包含options字段）
        // 而不是分离的bo和options
        const requestData = { ...data };
        
        // 发送数据到后端

        const response = await axios.post(backendUrl, requestData, {
            headers: {
                'Content-Type': 'application/json'
            },
            timeout: 30000 // 30秒超时
        });

        if (response.data.code != 200) {
            throw new Error(`请求失败: ${response.data.message || '未知错误'} (状态码: ${response.status})`);
        }
        
        return response.data;
    } catch (error) {
        console.error('发送数据失败:', error.message);
        if (error.response) {
            console.error('错误状态码:', error.response.status);
            console.error('错误响应:', JSON.stringify(error.response.data, null, 2));
            console.error('错误详情:', error.response.data);
        } else if (error.request) {
            console.error('请求未收到响应:', error.request);
        } else {
            console.error('请求配置错误:', error.message);
        }
        throw error;
    }
}

// 主函数
async function main() {
    console.log('开始读取JSON文件...');
    
    // 读取JSON数据
    const jsonData = subject;
    if (!jsonData) {
        console.error('无法读取JSON文件，程序退出');
        return;
    }
    
    console.log(`成功读取 ${jsonData.length} 条题目数据`);
    
    // 循环发送数据到后端
    let successCount = 0;
    let failCount = 0;
    
    console.log('开始循环发送数据...');
    
    // 并发控制：每次最多发送2条数据
    const batchSize = 2;
    
    for (let i = 0; i < jsonData.length; i += batchSize) {
        const batch = jsonData.slice(i, i + batchSize);
        const batchPromises = batch.map(async (item, index) => {
            const globalIndex = i + index;
            try {
                console.log(`正在发送第 ${globalIndex + 1}/${jsonData.length} 条数据...`);
                await sendDataToBackend(item);
                console.log(`✅ 第 ${globalIndex + 1} 条数据发送成功`);
                return { success: true, index: globalIndex + 1 };
            } catch (error) {
                console.error(`❌ 第 ${globalIndex + 1} 条数据发送失败:`, error.message);
                return { success: false, index: globalIndex + 1, error: error.message };
            }
        });
        
        // 等待当前批次完成
        const results = await Promise.all(batchPromises);
        
        // 统计结果
        results.forEach(result => {
            if (result.success) {
                successCount++;
            } else {
                failCount++;
            }
        });
        
        console.log(`批次 ${Math.floor(i/batchSize) + 1} 完成，成功: ${results.filter(r => r.success).length}/${results.length}`);
        
        // 批次间延迟
        if (i + batchSize < jsonData.length) {
            await new Promise(resolve => setTimeout(resolve, 200)); // 200ms延迟
        }
    }
    
    console.log('\n=== 发送完成统计 ===');
    console.log(`✅ 成功: ${successCount} 条`);
    console.log(`❌ 失败: ${failCount} 条`);
    console.log(`📊 总计: ${jsonData.length} 条`);
    console.log('所有操作完成!');
}

// 运行主函数
if (require.main === module) {
    main();
}

module.exports = {
    sendDataToBackend
};